/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package uloha3;

import java.util.Arrays;
import java.util.List;
import java.util.PriorityQueue;


public class VyriesHeuristikou1 implements BatohAlgoritmus{

        List<Batoh> zoznamInstancii;
    PriorityQueue<VecDoBatohu> fronta;

    public VyriesHeuristikou1(List<Batoh> zoznamInstancii) {
        this.zoznamInstancii = zoznamInstancii;
        fronta = new PriorityQueue<VecDoBatohu>();
    }

    public String vyriesProblemBatohu() {

        StringBuilder riesenie = new StringBuilder();
        for (Batoh aktualnaInstancia : zoznamInstancii) {
            
            int maxCena = Integer.MIN_VALUE;
            VecDoBatohu vecSmaxCenou = null;
            for (VecDoBatohu aktualnaVec : aktualnaInstancia.zoznamVeci) {
                fronta.add(aktualnaVec);
                if (aktualnaVec.cenaVeci > maxCena) {
                    maxCena = (int) aktualnaVec.cenaVeci;
                    vecSmaxCenou = aktualnaVec;
                }
            }
            int aktualnaHmotnostBatohu = 0;
            int aktualnaCenaBatohu = 0 ;
             int[] konfiguracia = new int[aktualnaInstancia.pocetVeciVbatohu];
            Arrays.fill(konfiguracia, 0);

            VecDoBatohu temp = null;
            while ((temp = fronta.poll()) != null) {
                if ((aktualnaHmotnostBatohu + temp.getHmotnostVeci()) <= aktualnaInstancia.maxHmotnost) {
                    aktualnaHmotnostBatohu += temp.getHmotnostVeci();
                    konfiguracia[temp.getId()] = 1;
                    aktualnaCenaBatohu += temp.getCenaVeci();
                }
            }
          riesenie.append(aktualnaInstancia.cisloInstancie + " " + aktualnaInstancia.pocetVeciVbatohu + " " + (int) aktualnaCenaBatohu + " ");
          for (int i = 0; i < konfiguracia.length; i++) {
                riesenie.append(konfiguracia[i] + " ");
           }
          riesenie.append("\n"); 
        } //koniec for prechadzajuci vsetky instancie
        System.out.println(riesenie.toString());
        return riesenie.toString();
    }//koniec vyries problem
    
}
